/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.academik.controller;

import java.io.Serializable;
import java.util.ArrayList;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.academik.model.Lugtrabajo;
import org.academik.model.Persona;
import org.academik.util.FacesUtil;
import org.academik.util.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.primefaces.event.RowEditEvent;

/**
 *
 * @author yolanda
 */
@ManagedBean(name = "personaBean")
@ViewScoped
public class PersonaBean extends AbstractViewScopedBean implements Serializable {

    //declaracion de variables
    private Persona persona;  //Una instancia de la clase Persona (Tabla persona)
    private ArrayList<Persona> listaPersona;
    private Lugtrabajo lugarTrabajos;

    //private Persona[] selectedpersonas;
    private Persona selectedpersona;

    /** Creates a new instance of PersonaBean */
    public PersonaBean() {
       
        this.nuevo();
    }

    /** Muestra los datos de la BD en la tabla*/
    //metodo para listar personas
    public void mostrarpersonas() {
        this.listaPersona = null;
        Session session = HibernateUtil.getSessionFactory().openSession();
        Criteria cPersonas = session.createCriteria(Persona.class);
        this.listaPersona = (ArrayList<Persona>) cPersonas.list();
        session.close();

    }

    @Override
    public void crear() {

        //guardar personas
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
              this.lugarTrabajos.setPersona(this.persona);
            session.saveOrUpdate(this.persona);//guardarlos
            tx.commit();//confirmar transaccion
            this.nuevo();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Informacion:", "Persona Creada se registro satisfactoriamente"));
        } catch (HibernateException e) {
            tx.rollback();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Un error ha ocurrido:", e.getCause().getMessage()));
        } finally {
            session.close();
        }

    }
    
    
 @Override
    public void eliminar() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = null;
        Persona p = (Persona) session.load(Persona.class, this.selectedpersona.getIdPersona());
     
        try {
            tx = (Transaction) session.beginTransaction();
            session.delete(p);
            tx.commit();
            this.nuevo();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Información:", "Registro eliminado satisfactoriamente"));
        } catch (HibernateException e) {
            tx.rollback();
            FacesUtil.hibernateException(e);
        } finally {
            session.close();
        }
    }
    
  
   @Override
     public void modificar() {
       
       this.persona = this.selectedpersona;
  
    }


    
    @Override
    public void nuevo() {
        this.persona = new Persona();
         this.lugarTrabajos = new Lugtrabajo();
        this.listaPersona = new ArrayList<Persona>();
        this.selectedpersona = new Persona() ;
        this.mostrarpersonas();
    }

    
    @Override
    public void cargarOpciones() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void cargarOpciones(int id) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void buscar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
     @Override
    public void cargarResgistros() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

//    @Override
//    public void modificar() {
//        throw new UnsupportedOperationException("Not supported yet.");
//    }
//    
    //seter and getter 
    public ArrayList<Persona> getListaPersona() {
        return listaPersona;
    }

    public void setListaPersona(ArrayList<Persona> listaPersona) {
        this.listaPersona = listaPersona;
    }

    public Persona getPersona() {
        return persona;
    }

    public void setPersona(Persona persona) {
        this.persona = persona;
    }

    public Persona getSelectedpersona() {
        return selectedpersona;
    }

    public void setSelectedpersona(Persona selectedpersona) {
        this.selectedpersona = selectedpersona;
    }

    public Lugtrabajo getLugarTrabajos() {
        return lugarTrabajos;
    }

    public void setLugarTrabajos(Lugtrabajo lugarTrabajos) {
        this.lugarTrabajos = lugarTrabajos;
    }

   

    
  
    

  

    
    
}
